#include <iostream>
#include <unistd.h>
#include <pthread.h>

using namespace std;

int val_ = 20000; // 共享变量

void* pthreadRun(void* arg) {
    while (true) {
        if (val_ > 0) { // 故意不加锁，制造竞态条件
            // 模拟抢票
            val_--;
            cout << "线程：" << (char*)arg << " 抢票成功，剩余：" << val_ << " 张票" << endl;
        } else {
            break;
        }
        usleep(1000); // 短暂休眠，增加竞态条件的可能性
    }
    return nullptr;
}

const int num = 5; // 线程数量

int main() {
    pthread_t pths[num];
    for (int i = 1; i <= num; ++i) {
        char* name = new char[64];
        snprintf(name, 64, "thread-%d", i);
        pthread_create(&pths[i - 1], nullptr, pthreadRun, name);
    }
    for (int i = 1; i <= num; ++i) {
        pthread_join(pths[i - 1], nullptr);
    }
    return 0;
}